public class EvenTimesOddTimes {
    /**
     *  找数组内 单独的数   其他数据是成对的
     * @param arr
     */
    public static void printOddTimes(int[]arr){
        int elementOdd =0;
        for (int curr : arr) {
            elementOdd ^= curr;
        }
        System.out.println("elementOdd = " + elementOdd);
    }

    /**
     * elementOdd  两个单独的数据  异或出来的
     * elementTmp  其中的一个单独数
     *  另外一个单独数据   =odd^tmp
     * @param arr
     */
    public static void printOddTimes2(int[] arr){
        int elementOdd =0;
        int elementTmp=0;
        for (int curr : arr) {
            elementOdd ^= curr;
        }
        //求补码  不是 补码
        // 这个 odd  两个不同的异或数据 必定有一位是1
        //other 只会是 七个0  一个1   这么算没有例外
        int other = elementOdd & (~elementOdd +1);
        for (int curr : arr) {
            if ((curr& other) !=0){
                elementTmp ^= curr;
            }
        }
    }
}
